package com.itheima.d9_generics_attention;

import java.math.BigDecimal;
import java.util.ArrayList;
public class Test {
    public static void main(String[] args) {
        // 目标：理解泛型的注意事项。
        // 1、泛型是工作在编译阶段的，一旦程序编译成class文件，class文件中就不存在泛型了，这就是泛型擦除。
        //到反射学习的时候可以验证
        //即便是一个存储字符串类型的集合，也可以存入任意类型数据
        ArrayList<String> list = new ArrayList<>();
        list.add("Hello");
//        list.add(Car()); //在编译阶段泛型起到类型检查的作用，除了String类型就不能放进去了
        //到了反射知识学习，可以存入任意类型的数据

        // 2、泛型不支持基本数据类型，只能支持对象类型（引用数据类型）
//        ArrayList<int> list2 = new ArrayList<int>();
        //如果想要存储基本类型数据，需要将泛型定义为基本类型对呀的包装类型（引用类型
        /*
        *  基本类型：          byte    short       int        long      float      double       char        boolean
        *  包装类型（引用类型）：Byte    Short     Integer      Long      Float      Double     Character     Boolean
        * 基本类型可以和包装类型之间自动转换
        * */
        //存储int类型的数据，就应该使用Integer指定泛型
        ArrayList<Integer> list3 = new ArrayList<>();
        list3.add(100); //基本类型数据100会自动变成包装类型的对象
        list3.add(200); //基本类型数据200会自动变成包装类型的对象
    }

}

class Car{}
